//解题方式为经典定义公式，搭配阶乘推导公式，搭配快速幂求逆元公式
#include <iostream>
using namespace std;

typedef long long ll;

const int N = 100010;
const ll mod = 1e9 + 7;

int n, a, b;           //获取输入
ll fact[N], infact[N]; //用来存储阶乘和阶乘的逆元

ll quick_pow(int a, int b, int p) //a的b次幂模p
{
    ll res = 1, t = a; //res是最后存储的答案，t为当前的次幂
    while (b)          //在b不为0之前遍历b的每一位，可以认为把b转化为二进制拆分为每一位
    {
        if (b & 1)             //如果当前遍历到了的位为1
            res = res * t % p; //因为当前位是1，所以答案要乘以t再模p
        t = t * t % p;         //更新新系数
        b >>= 1;
    }
    return res;
}

int main()
{
    // freopen("cin.txt", "r", stdin);
    fact[0] = 1;
    infact[0] = quick_pow(fact[0], mod - 2, mod);
    for (int i = 1; i < N; ++i)
    {
        fact[i] = fact[i - 1] * i % mod; //注意，这里的每一个乘法都可能会爆ll，故而一定要算一下模一下
        infact[i] = quick_pow(fact[i], mod - 2, mod);
    }
    cin >> n;
    while (n--)
    {
        cin >> a >> b;
        cout << fact[a] * infact[b] % mod * infact[a - b] % mod << endl; //如果三个数连着乘可能会爆ll，故而这里必须乘一步就模一下
    }
    return 0;
}